package xpadro.spring.web.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import xpadro.spring.web.model.Series;
public class SeriesFunctionalTest extends SeriesFunctionalBaseTests {
private static final String BASE_URI = "http://localhost:8080/spring-rest-api-v4/spring/series";
private RestTemplate restTemplate = new RestTemplate();
@Before
public void setup() {
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
converters.add(new StringHttpMessageConverter());
converters.add(new Jaxb2RootElementHttpMessageConverter());
converters.add(new MappingJackson2HttpMessageConverter());
restTemplate.setMessageConverters(converters);
initializeDatabase();
}
@Test
public void getAllSeries() {
Series[] series = restTemplate.getForObject(BASE_URI, Series[].class);
assertNotNull(series);
assertEquals(2, series.length);
assertEquals(1L, series[0].getId());
assertEquals("The walking dead", series[0].getName());
assertEquals("USA", series[0].getCountry());
assertEquals("Thriller", series[0].getGenre());
assertEquals(2L, series[1].getId());
assertEquals("Homeland", series[1].getName());
assertEquals("USA", series[1].getCountry());
assertEquals("Drama", series[1].getGenre());
}
@Test
public void getJsonSeries() {
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>();
converters.add(new MappingJackson2HttpMessageConverter());
restTemplate.setMessageConverters(converters);
String uri = BASE_URI + "/{seriesId}";
ResponseEntity<Series> seriesEntity = restTemplate.getForEntity(uri, Series.class, 1l);
assertNotNull(seriesEntity.getBody());
assertEquals(1l, seriesEntity.getBody().getId());
assertEquals("The walking dead", seriesEntity.getBody().getName());
assertEquals("USA", seriesEntity.getBody().getCountry());
assertEquals("Thriller", seriesEntity.getBody().getGenre());
assertEquals(MediaType.parseMediaType("application/json;charset=UTF-8"), seriesEntity.getHeaders().getContentType());
}
@Test
public void getXmlSeries() {
String uri = BASE_URI + "/{seriesId}";
ResponseEntity<Series> seriesEntity = restTemplate.getForEntity(uri, Series.class, 1L);
assertNotNull(seriesEntity.getBody());
assertEquals(1l, seriesEntity.getBody().getId());
assertEquals("The walking dead", seriesEntity.getBody().getName());
assertEquals("USA", seriesEntity.getBody().getCountry());
assertEquals("Thriller", seriesEntity.getBody().getGenre());
assertEquals(MediaType.APPLICATION_XML, seriesEntity.getHeaders().getContentType());
}
@Test
public void getNotFoundSeries() {
String uri = BASE_URI + "/{seriesId}";
try {
restTemplate.getForEntity(uri, Series.class, 5L);
} catch (HttpClientErrorException e) {
assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
}
}
@Test
public void insertNewSeries() {
Series series = new Series();
series.setId(4L);
series.setName("mySeries");
series.setCountry("England");
series.setGenre("sci-fi");
URI newUserLocation = restTemplate.postForLocation(BASE_URI, series);
assertEquals(BASE_URI + "/4", newUserLocation.toString());
}
@Test
public void deleteExistingSeries() {
String uri = BASE_URI + "/{seriesId}";
restTemplate.delete(uri, 2L);
try {
restTemplate.getForEntity(uri, Series.class, 2L);
} catch (HttpClientErrorException e) {
assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
}
}
}